package com.ruoyi.project.third;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.shaded.org.slf4j.Logger;
import org.apache.rocketmq.shaded.org.slf4j.LoggerFactory;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

@Slf4j
public class RocketmqSimpleConsumer {

    private static final Logger LOGGER = LoggerFactory.getLogger(RocketmqSimpleConsumer.class);

    private RocketmqSimpleConsumer () {
    }

    /*public static void main (String[] args) throws ClientException, IOException {
        //          实例接入点，从控制台实例详情页的接入点页签中获取。          如果是在阿里云ECS内网访问，建议填写VPC接入点。          如果是在本地公网访问，或者是线下IDC环境访问，可以使用公网接入点。使用公网接入点访问，必须开启实例的公网访问功能。

        String endpoints = "http://1008227139678829.mqrest.cn-qingdao-public.aliyuncs.com";
        //指定需要订阅哪个目标Topic，Topic需要提前在控制台创建，如果不创建直接使用会返回报错。
        String topic = "ef923e43_zhejianglinggong";
        //为消费者指定所属的消费者分组，Group需要提前在控制台创建，如果不创建直接使用会返回报错。
        String consumerGroup = "GID_ef923e43_zhejianglinggong";
        final ClientServiceProvider provider = ClientServiceProvider.loadService();
        ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoints);
        //          如果是使用公网接入点访问，configuration还需要设置实例的用户名和密码。用户名和密码在控制台实例详情页获取。          如果是在阿里云ECS内网访问，无需填写该配置，服务端会根据内网VPC信息智能获取。

        //builder.setCredentialProvider(new StaticSessionCredentialsProvider("Instance UserName", "Instance Password"));
        ClientConfiguration clientConfiguration = builder.build();

        Duration awaitDuration = Duration.ofSeconds(10);
        //订阅消息的过滤规则，表示订阅所有Tag的消息。
        String tag = "*";
        FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
        //初始化SimpleConsumer，需要绑定消费者分组ConsumerGroup、通信参数以及订阅关系。
        SimpleConsumer consumer = provider.newSimpleConsumerBuilder().setClientConfiguration(clientConfiguration)
                //设置消费者分组。
                .setConsumerGroup(consumerGroup)
                //设置长轮询超时时间。
                .setAwaitDuration(awaitDuration)
                //设置预绑定的订阅关系。
                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression)).build();
        //消息的最大重试投递次数。
        int maxMessageNum = 16;
        //设置消息的不可见时间。
        Duration invisibleDuration = Duration.ofSeconds(10);
        //SimpleConsumer需要客户端一直主动循环获取消息，并进行消费处理。
        //如果需要提高消费实时性，建议多线程并发拉取。
        while (true) {
            final List <MessageView> messages = consumer.receive(maxMessageNum, invisibleDuration);
            messages.forEach(messageView -> {
                // LOGGER.info("Received message: {}", messageView);
                System.out.println("Received message: " + messageView);
            });
            for (MessageView message : messages) {
                final MessageId messageId = message.getMessageId();
                try {
                    //消费处理完成后，需要主动调用ACK向服务端提交消费结果。
                    consumer.ack(message);
                    System.out.println("Message is acknowledged successfully, messageId= " + messageId);
                    //LOGGER.info("Message is acknowledged successfully, messageId={}", messageId);
                } catch (Throwable t) {
                    log.error("消费异常：{}", t);
                    //LOGGER.error("Message is failed to be acknowledged, messageId={}", messageId, t);
                }
            }
        }
        // 如果不需要再使用SimpleConsumer，可关闭该进程。
        // consumer.close();
    }*/


    public static void main (String[] args) throws UnsupportedEncodingException {
       /* Properties properties = new Properties();
        // 您在控制台创建的Group ID。
        properties.put(PropertyKeyConst.GROUP_ID, "GID_ef923e43_zhejianglinggong");
        // AccessKey ID，阿里云身份验证标识。获取方式，请参见本文前提条件中的获取AccessKey。
        properties.put(PropertyKeyConst.AccessKey, "LTAI4GJhXnDLdJuEy2H5WC21");
        // AccessKey Secret，阿里云身份验证密钥。获取方式，请参见本文前提条件中的获取AccessKey。
        properties.put(PropertyKeyConst.SecretKey, "zTt6dTFc6gL1hpFQJSPqS7MBouOOiM");
        // 设置TCP协议接入点，进入控制台的实例详情页面的TCP协议客户端接入点区域查看。
        properties.put(PropertyKeyConst.NAMESRV_ADDR,
                "http://MQ_INST_1008227139678829_BcuN0Ins.mq-internet-access.mq-internet.aliyuncs.com:80"
        );
        // 集群订阅方式（默认）。
        // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING);
        // 广播订阅方式。
        // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);

        Consumer consumer = ONSFactory.createConsumer(properties);
        consumer.subscribe("ef923e43_zhejianglinggong",
                "JobComplete||Dialing || CallAnswered || CallFinished ||RecordingReady ", new MessageListener() {
                    @Override
                    public Action consume (Message message, ConsumeContext context) {
                        System.out.println("Receive: " + message);
                        return Action.CommitMessage;
                    }
                }
        );

        consumer.start();
        System.out.println("Consumer Started");*/

        String body = "eyJjb250YWN0cyI6W3siaG9ub3JpZmljIjoi5a2Z5YWI55SfIiwiaWQiOiI4NmE5ODU4ZS1mOWI4LTQ2ZWItYTljMy04YTY4Yzc2NWQ4MzAiLCJuYW1lIjoi6LCi5bCR5YabIiwicGhvbmVOdW1iZXIiOiIxMzI1NzE4OTgxNyIsInJlZmVyZW5jZUlkIjoiQlQxMTAxMzA0MzE5MDY5NjUwOTQ0MSJ9XSwiZXZlbnRUaW1lIjoxNjg2OTA5Mjk5NjQzLCJldmVudFR5cGUiOiJKb2JDb21wbGV0ZSIsImV4dHJhcyI6W3sia2V5Ijoi6Ieq5a6a5LmJ5Y+C5pWwMSIsInZhbHVlIjoiMSJ9LHsia2V5Ijoi6Ieq5a6a5LmJ5Y+C5pWwMiIsInZhbHVlIjoiMiJ9LHsia2V5IjoiVGVuYW50SWQiLCJ2YWx1ZSI6IjE3NTkwMTY5OTk4Nzk5ODUifSx7ImtleSI6IlNlcnZpY2VJZCIsInZhbHVlIjoiMjA3Mzg1OTgxNzg4MDE4MjYwIn1dLCJmYWlsdXJlUmVhc29uIjoiVGltZVVwIiwiZ3JvdXBJZCI6ImZkNmQ3OWNlLTA1YjgtNDNiNC1iYmEyLWQwNGEzYzkyM2JmYyIsImlkIjoiMGIzYTdiNzEtMDg5OC00NjNmLWIzZDQtNGRlODUzZjJlZGVhIiwiaW5zdGFuY2VJZCI6IjY1NGE0MGJhLWJhM2QtNGZlYy05ZjlmLTI0NmIyMmVlYWQ2MSIsInN0YXR1cyI6IkZhaWxlZCIsInRhZ0hpdHMiOltdLCJ0YXNrcyI6W119";
        byte[] decode = Base64.getDecoder().decode(body);
        String decodeStr = new String(decode, "UTF-8");

        System.out.println(decodeStr);
    }


}